An app can hook into the Web API (REST + Realtime), to allow for external access. A use case would for example be a Raspberry PI that reports it's status to Homey.
Your app's API edpoints are available under the following url: /api/app/com.yourapp.id/. All endpoints are by default protected, and the requesting user needs permission to your app (which is granted by default after installation). You can override this by setting public: true.
To add API endpoints to your app, create a file /api.js in your app's root folder. An example is shown below.
/api.js
module.exports = [
  {
    method: 'GET',
    path: '/',
    public: true,
    fn: function( args, callback ){
      const result = Homey.app.getSomething();
      // callback follows ( err, result )
      callback( null, result );
      // access /?foo=bar as args.query.foo
    }
  },
  {
    method: 'POST',
    path: '/',
    fn: function( args, callback ){
      const result = Homey.app.addSomething( args.body );
      if( result instanceof Error ) return callback( result );
      return callback( null, result );
    }
  },
  {
    method: 'PUT',
    path: '/:id',
    fn: function( args, callback ){
      const result = Homey.app.updateSomething( args.params.id, args.body );
      if( result instanceof Error ) return callback( result );
      return callback( null, result );
    }
  },
  {
    method: 'DELETE',
    path: '/:id',
    fn: function( args, callback ){
      const result = Homey.app.deleteSomething( args.params.id );
      if( result instanceof Error ) return callback( result );
      return callback( null, result );
    }
  }
]
Homey.appis the instance of your App.
Parameters
Possible parameters for an API endpoint object are:
| key | type | value | 
|---|---|---|
| method | String,Array | GET,POST,PUTorDELETE, or an array of these values | 
| path | String | e.g. /,/:foo,/bar/:foo | 
| fn | Function | The function to execute when the call has been made | 
| public | Boolean | Set to trueto make this endpoint accessible without a token | 
| role | String | Set to ownerto make this endpoint only accessible to owners | 
The args object
The args object has three properties: body, query and params.
Body
This is an object with the body, when your request has method POST or PUT. JSON is automatically parsed.
Params
The params object is a set of strings defined in your path.
Query
The params object is a set of strings that are provided as query parameters, e.g. ?foo=bar will result in { "foo": "bar" }.
Realtime
Your app can emit 'realtime' events, which are one-way events to a subscribing client, e.g. a browser showing a Settings page.
/app.js
Homey.ManagerApi.realtime('my_event', 'my_json_stringifyable_value')
  .catch( this.error )
 You are currently viewing the Homey Apps SDK v2 documentation. New apps should use Homey Apps SDK v3 ››
      You are currently viewing the Homey Apps SDK v2 documentation. New apps should use Homey Apps SDK v3 ››